home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-06-12 | 6.0 KB | 147 lines | [TEXT/McSk] |
- ( Grafics words for Pocket Forth 0.6 )
- forget task : task ; decimal
- 0 28 +md ! page
-
- ( create named rects )
- : RECT ( compile: -- ) ( run: -- addr ) variable 6 allot ;
-
- ( rect words work on any 8 bytes )
- : !RECT ( t l b r rect -- ) >r swap r 4 + 2! swap r> 2! ;
- : @RECT ( rect -- t l b r ) dup 2@ swap rot 4 + 2@ swap ;
- : @TL ( rect -- t l ) @rect 2drop ;
- : RCENTER ( rect -- h v ) @rect >r swap >r ( -- tb r: -- rl )
- over - 2 / + 2r> dup rot swap - 2 / + swap ;
- : RCLIP ( rect -- ) a>r ,$ A87B ; ( _ClipRect )
- : RINVALID ( rect -- ) a>r ,$ A928 ; ( _InvalRect )
- : ROFFSET ( h v rect -- ) a>r 2>r ,$ A8A8 ; ( _OffsetRect )
- : RINSET ( h v rect -- ) a>r 2>r ,$ A8A9 ; ( _InsetRect )
- : ?IN ( h v rect -- flag ) ( true if h,v is in rect at addr )
- 0 >r rot rot 2>r a>r ,$ A8AD r> ; ( _PtInRect )
- : ?EMPTY ( rect -- flag ) 0 >r a>r ,$ A8AE r> ; ( _EmptyRect )
-
- ( rect drawing )
- : RFRAME ( rect -- ) a>r ,$ A8A1 ; ( _FrameRect )
- : OFRAME ( rect -- ) a>r ,$ A8B7 ; ( _FrameOval )
- : RERASE ( rect -- ) a>r ,$ A8A3 ; ( _EraseRect )
- : OERASE ( rect -- ) a>r ,$ A8B9 ; ( _EraseOval )
- : RINVERT ( rect -- ) a>r ,$ A8A4 ; ( _InvertRect )
- : OINVERT ( rect -- ) a>r ,$ A8BA ; ( _InvertOval )
- : RPAINT ( rect -- ) a>r ,$ A8A2 ; ( _PaintRect )
- : OPAINT ( rect -- ) a>r ,$ A8B8 ; ( _PaintOval )
-
- ( Read PICT resources from a file on disk ) ( If the pictures ... )
- ( ... are in the current file, only getpict need be called. )
- variable #REF ( resource file reference number )
- : ROPEN ( addr -- ) ( rel addr of the file/path name )
- 0 >r a>r ,$ A997 r> #ref ! ; ( _OpenResFile )
- : RCLOSE ( -- ) ( always close after each opening )
- #ref @ >r ,$ A99A 0 #ref ! ; ( _CloseResFile )
- : GETPICT ( id -- dhandle ) 0 0 2>r >r ,$ A9BC 2r> ; ( _GetPict )
-
- ( create pictures )
- : PICTURE ( rect -- dhandle ) ( start a picture definition )
- 0 0 2>r a>r ,$ A8F3 2r> ; ( _OpenPicture )
- : PCLOSE ,$ A8F4 ; macro ( _ClosePicture )
- : PKILL ( addr -- ) 2@ 2>r ,$ A8F5 ; ( _KillPicture at addr )
-
- ( display pictures )
- : PRECT ( dhandle -- t l b r ) ( the Picture RECT )
- dl@ 2dup 2 0 d+ dl@ 2swap 6 0 d+ dl@ ;
- : PSIZE ( dhandle -- h v ) prect rot - abs rot rot - abs ;
- : DPICT ( dhandle h v -- ) ( draw a picture in its own rect )
- 2over psize 2over d+ here !rect
- 2>r here a>r ,$ A8F6 ; ( _DrawPicture )
- : PDRAW ( rect dhandle -- ) ( draw a picture in a rect )
- 2>r a>r ,$ A8F6 ; ( _DrawPicture )
-
- ( regions ) ( keep the handle on the stack "dhandle" )
- : REGION ( -- dhandle ) ( create an open region, deliver a handle )
- 0 0 2>r ,$ A8D8 2r> ,$ A8DA ; ( _NewRgn _OpenRgn )
- : RGCLOSE ( dhandle -- ) 2>r ,$ A8DB ; macro ( _CloseRgn )
- : RGDISP ( dhandle -- ) 2>r ,$ A8D9 ; macro ( _DisposRgn )
- : RGCLIP ( dhandle -- ) 2>r ,$ A879 ; macro ( _SetClip )
- : ?RGIN ( dhandle h v -- flag ) ( true if h,v is in region at dhandle )
- 0 >r 2>r 2>r ,$ A8E8 r> ; ( _PtInRegion )
-
- ( region drawing )
- : RGFRAME ( dhandle -- ) 2>r ,$ A8D2 ; macro ( _FrameRgn )
- : RGERASE ( dhandle -- ) 2>r ,$ A8D4 ; macro ( _EraseRgn )
- : RGINVERT ( dhandle -- ) 2>r ,$ A8D5 ; macro ( _InvertRgn )
-
- ( font words )
- : !FONT ( n -- ) >r ,$ A887 ; macro ( _TextFont ) ( set font )
- : !FSIZE ( n -- ) >r ,$ A88A ; macro ( _TextSize ) ( set size )
- : !FACE ( face -- ) >r ,$ A888 ; macro ( _TextFace ) ( set style )
- : !FMODE ( mode -- ) >r ,$ A889 ; macro ( _TextMode ) ( set mode )
- : SFONT ( -- ) 0 !font 12 !fsize ; ( set System font )
- : NFONT ( -- ) 4 !font 09 !fsize 0 !fmode ; ( set Normal font )
-
- ( Polygons ) ( keep the handle in a 2variable "poly" )
- : NPOLY ( poly -- ) 0 0 2>r ,$ A8CB 2r> rot 2! ; ( _OpenPoly )
- : CPOLY ( -- ) ,$ A8CC ; macro ( _ClosePgon )
- : FPOLY ( poly -- ) 2@ 2>r ,$ A8C6 ; ( _FramePoly )
- : EPOLY ( poly -- ) 2@ 2>r ,$ A8C8 ; ( _ErasePoly )
- : KPOLY ( poly -- ) 2@ 2>r ,$ A8CD ; ( _KillPoly )
- : ?PHIT ( h v poly -- flag ) ( true if h,v is in polyBBox )
- 0 >r 2@ dl@ 2 0 d+ 2swap 2>r 2>r ,$ A8AD r> ; ( _PtInRect )
-
- ( old style colors )
- 33 constant BLACK 30 constant WITE
- 205 constant RED 341 constant GREEN
- 409 constant BLUE 273 constant CYAN
- 137 constant MAGENTA 69 constant YELLOW
- : FCOLOR ( color.code -- ) 0 2>r ,$ A862 ; ( _ForeColor )
- : BCOLOR ( back.color -- ) 0 2>r ,$ A863 ; ( _BackColor )
-
-
- ( A demonstration )
- : DEMO ; ( The infamous Mondrian program w/ enhancement )
-
- \ Random numbers
- : SEED ( -- daddr ) ,$ 2d15 126 0 dnegate d+ ;
- : TIME ( -- d ) 524 0 dl@ ;
- : RANDOMIZE time seed dl! ;
- : RANDOM ( n -- n' )
- 0 >r ,$ A861 r> ( _Random )
- swap 32768 */ abs ; ( scale to size from stack )
-
- : SSIZE ( -- h v ) ( screen size in pixels )
- ,$ 2d2d ,$ ff8c ; macro ( move.l screenBits[a5],-[ps] )
- : WSIZE ( h v -- ) ( change the window size )
- 2dup 8 +md 2! ( set the scroll rect )
- 0 +md 2@ 2>r 2>r 256 >r ,$ A91D ; ( _SizeWindow )
-
- create COLORS ( use an array of old style colors )
- yellow , cyan , wite , blue , yellow , wite ,
- : RCOLOR 6 random 2* colors + @ ; ( pick a color at random )
-
- rect INRECT ( drawn in rect )
- rect MRECT ( the random rect )
-
- : WIDTH inrect dup 6 + @ 50 - random swap 2+ @ + ;
- : HEIGHT inrect dup 4 + @ 52 - random swap @ + ;
-
- : DRAW ( draw a random rect in inrect )
- height width height width mrect !rect ( set random rect )
- rcolor fcolor mrect
- 7 random IF rinvert ELSE opaint THEN
- 750 random 0= IF inrect rerase THEN ;
-
- : MONDRIAN ( -- )
- 0 +md 2@ 2>r 0 20 2>r 1 >r ,$ A91B ( _MoveWindow to top left )
- ssize wsize ( set the window to full screen )
- black bcolor 4 +md rerase
- 52 50 8 +md 2@ -53 -51 d+ swap inrect !rect ( drawing rect )
- inrect rframe 1 1 inrect rinset ( make a black frame )
- wite bcolor inrect rerase ( erase pane )
- 8 +md @ 2/ 100 - 40 !pen ( pen position for title )
- 3 !fmode sfont ." Press a key to end the demo."
- randomize
- BEGIN draw ?terminal ?button or UNTIL ( wait )
- black fcolor 384 178 wsize nfont
- 0 +md 2@ 2>r 2 40 2>r 1 >r ,$ A91B ( _MoveWindow to normal )
- page ." Graphics words are loaded." cr ;
-
- mondrian
- forget demo -1 28 +md !
-